//
// Created by lingzhitech on 25-9-17.
//
#include <iostream>
#include <memory>
#include <string>

// 模拟一个连接对象
struct connection {
    std::string ip;
    int port;
    connection(const std::string& ip_, int port_) : ip(ip_), port(port_) {
        std::cout << "Connecting to " << ip << ":" << port << std::endl;
    }
};

// 模拟断开连接
void disconnect(connection* p) {
    std::cout << "Disconnecting " << p->ip << ":" << p->port << std::endl;
    delete p;  // 释放内存
}

// 使用 shared_ptr 管理连接
void f(const std::string& ip, int port) {
    // 传入自定义 deleter，确保即使异常发生也能正确断开
    std::shared_ptr<connection> pConn(new connection(ip, port), disconnect);

    std::cout << "Using connection..." << std::endl;
    // 这里可以做一些对连接的操作
    // ...
} // 离开作用域时，pConn 自动调用 disconnect

int main() {
    f("127.0.0.1", 3306);
}
